package com.acwing.partition4;

import java.io.*;
import java.util.Arrays;

/**
 * @author `RKC`
 * @date 2022/2/7 15:53
 */
public class AC378骑士放置 {

    private static final int N = 110;
    private static final int[][] dirs = {{-2, 1}, {-1, 2}, {1, 2}, {2, 1}, {2, -1}, {1, -2}, {-1, -2}, {-2, -1}};
    private static boolean[][] graph = new boolean[N][N], st = new boolean[N][N];
    private static int[][][] match = new int[N][N][2];

    private static int n = 0, m = 0, k = 0;

    private static final BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
    private static final BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(System.out));

    public static void main(String[] args) throws IOException {
        String[] ss = reader.readLine().split(" ");
        n = Integer.parseInt(ss[0]);
        m = Integer.parseInt(ss[1]);
        k = Integer.parseInt(ss[2]);
        for (int i = 0; i < k; i++) {
            ss = reader.readLine().split(" ");
            int x = Integer.parseInt(ss[0]), y = Integer.parseInt(ss[1]);
            graph[x][y] = true;
        }
        int ans = 0;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                if (((i + j) & 1) == 1 && !graph[i][j]) {
                    for (int x = 0; x < N; x++) Arrays.fill(st[x], false);
                    if (dfs(i, j)) ans++;
                }
            }
        }
        writer.write((n * m - k - ans) + "\n");
        writer.flush();
    }

    private static boolean dfs(int x, int y) {
        for (int[] dir : dirs) {
            int nx = x + dir[0], ny = y + dir[1];
            if (nx < 1 || nx > n || ny < 1 || ny > m || st[nx][ny] || graph[nx][ny]) continue;
            st[nx][ny] = true;
            int[] pair = match[nx][ny];
            if (pair[0] == 0 || dfs(pair[0], pair[1])) {
                match[nx][ny] = new int[]{x, y};
                return true;
            }
        }
        return false;
    }
}
